package demo.using;


import com.alibaba.fastjson.JSON;
import demo.utils.StringUtil;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * @author : GuoFei
 * @date : 2018/11/9 15:19
 */
public class LeetCode {



    /*
给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大，为 6。
     */


    public static void main(String[] args) {
//        String s = "abcd";
//         combine();
//        System.out.println(factorial(7));
//        for (String r : result) {
//            System.out.println(r);
//        }

//        int res = maxSubArray(new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4});
//        System.out.println("-------------------");
//        System.out.println(res);


    }

    public static long factorial(long number) {
        if (number <= 1)
            return 1;
        else
            return number * factorial(number - 1);
    }

    private static ArrayList<String> combineString(String s) {
        int len = s.length();
        ArrayList<String> list = new ArrayList<String>();
        int count = (int) (Math.pow(2, len));
        for (int i = 1; i < count; ++i) {
            String temp = "";
            String str = Integer.toBinaryString(i);
            while (str.length() < len) {
                str = "0" + str;
            }
            for (int j = 0; j < str.length(); ++j) {
                if (str.charAt(j) == '1') {
                    temp += s.charAt(j);
                }
            }
            list.add(temp);
        }
        return list;
    }


    public static void combine() {
        String resource = "abcdefg";
        Set<String> res = new HashSet<>();
        buildRes(res, resource);


        System.out.println(res.size());
        res.stream().forEach(System.out::println);
    }

    public static void buildRes(Set<String> res, String resource) {
        List<String> temp = new ArrayList<>();
        int tempInt;
        for (int i = 0; i < 1000000; i++) {
            Arrays.stream(resource.split("")).forEach(temp::add);
            String tempStr = "";
            while (temp.size() != 0) {
                tempInt = RandomUtils.nextInt(0, temp.size());
                tempStr += temp.get(tempInt);
                temp.remove(tempInt);
            }
            res.add(tempStr);
        }
//        res.add("abcd");
//        res.add("abdc");
//        res.add("acbd");
//        res.add("acdb");
//        res.add("adbc");
//        res.add("adcb");
//        res.add("bacd");
//        res.add("badc");
//        res.add("bcda");
//        res.add("bcad");
//        res.add("bdac");
//        res.add("bdca");
//        res.add("cabd");
//        res.add("cadb");
//        res.add("cbad");
//        res.add("cbda");
//        res.add("cdab");
//        res.add("cdba");
//        res.add("dabc");
//        res.add("dacb");
//        res.add("dbac");
//        res.add("dbca");
//        res.add("dcab");
//        res.add("dcba");
    }


    public static void combination(String str, int index, int number, StringBuilder sb) {
        if (number == -1) {
            System.out.println(sb.toString());
            return;
        }
        if (index == str.length())
            return;
        sb.append(str.charAt(index));  //向StringBuilder中添加元素
        combination(str, index + 1, number - 1, sb);
        sb.deleteCharAt(sb.length() - 1);  //在StringBuilder中删除元素
        combination(str, index + 1, number, sb);
    }

    public static boolean canTrans(String beginWord, String targetWord) {
        int temp = 0;
        for (int i = 0; i < beginWord.length(); i++) {
            if (beginWord.charAt(i) != targetWord.charAt(i)) {
                temp++;
            }
            if (temp > 1) {
                return false;
            }
        }
        return true;
    }


    public static void soutInts(int[][] args) {
        System.out.println("________________");
        for (int[] a : args) {
            for (int b : a) {
                System.out.print(b + "\t");
            }
            System.out.println();
        }
        System.out.println("________________");
    }


    public static void soutInts() {
        soutInts(new int[][]{{4, 1, 2}, {5, 0, 3}});
        soutInts(new int[][]{{4, 1, 2}, {0, 5, 3}});
        soutInts(new int[][]{{0, 1, 2}, {4, 5, 3}});
        soutInts(new int[][]{{1, 0, 2}, {4, 5, 3}});
        soutInts(new int[][]{{1, 2, 0}, {4, 5, 3}});
        soutInts(new int[][]{{1, 2, 3}, {4, 5, 0}});
    }

}














